'use strict';

const Service = require('egg').Service;

class CacheService extends Service {
    /**
     * 设置缓存
     * @param {string} key - 缓存键
     * @param {*} value - 缓存值
     * @param {number} seconds - 过期时间（秒）
     */
    async set(key, value, seconds) {
        const {redis} = this.app;
        if (seconds) {
            await redis.set(key, JSON.stringify(value), 'EX', seconds);
        } else {
            await redis.set(key, JSON.stringify(value));
        }
    }

    /**
     * 获取缓存
     * @param {string} key - 缓存键
     * @return {*} 缓存值
     */
    async get(key, type = 'json') {
        const {redis} = this.app;
        const value = await redis.get(key);
        if (type === 'json') {
            return value ? JSON.parse(value) : null;
        } else if (type === 'arr') {
            return value ? JSON.parse(value) : [];
        } else {
            return value;
        }
    }

    /**
     * 删除缓存
     * @param {string} key - 缓存键
     */
    async del(key) {
        const {redis} = this.app;
        await redis.del(key);
    }
}

module.exports = CacheService;
